package com.atguigu.graph;

import com.sun.org.apache.bcel.internal.generic.NEW;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author shkstart
 * @create 2021-08-18 15:16
 */
public class Graph {
    //创建存储顶点的集合
    private ArrayList<String> vertexList = new ArrayList<>();
    //创建一个二维数组存储对应的邻接矩阵
    private int[][] edges;
    //边的数目
    int numOfEdges;
    //定义给数组boolean[], 记录某个结点是否被访问
    private boolean[] isVisited;

    public static void main(String[] args) {
        //创建矩阵
        //节点的个数
        int n=5;
        //确定节点
        String vertexs[]={"A","B","C","D","E"};
        //创建图的对象
        Graph graph = new Graph(n);
        //添加节点
        for (String vertex:vertexs){
            graph.insertVertex(vertex);
        }
        //添加边--A-0  B-1  C-2 D-3 E-4
        graph.insertEdge(0,1,1);
        graph.insertEdge(0,2,1);
        graph.insertEdge(1,2,1);
        graph.insertEdge(1,3,1);
        graph.insertEdge(1,4,1);
        //显示矩阵
        graph.showGraph();
    }
  //创建构造器
    public Graph(int n){
        //创建二维数组
         edges = new int[n][n];
        vertexList = new ArrayList<>(n);
         numOfEdges=0;
         isVisited=new boolean[n];
    }
   //获取边的个数
    public int getNumOfEdges(){
        return numOfEdges;
    }
    //返回节点的个数
    public int getNumofVertex(){
        return vertexList.size();
    }
    //获取节点
    public String getValueByIndex(int i){
        return vertexList.get(i);
    }
    //添加节点
    public void insertVertex(String vertex){
        vertexList.add(vertex);
    }
    //返回v1和v2之间的权值
    public int getWeight(int v1,int v2){
        return edges[v1][v2];
    }
    //显示对应的矩阵
    public void showGraph(){
        for (int[] link:edges){
            System.out.println(Arrays.toString(link));
        }
    }
    //添加边的个数
    /**
     *
     * @param v1 表示点的下标即使第几个顶点  "A"-"B" "A"->0 "B"->1
     * @param v2 第二个顶点对应的下标
     * @param weight 表示
     */
    public void insertEdge(int v1,int v2,int weight){
        //无向，没路径
        edges[v1][v2]=weight;
        edges[v2][v1]=weight;
        numOfEdges++;
    }
}
